<?php
if (!defined('CEFIRO')) define("CEFIRO",substr(__FILE__,0,strpos(__FILE__,"cefiro"))."cefiro/widgets/cefiro.php");
require_once(CEFIRO);

/**
 * @file domains.php
 * @brief Clase para los dominios de los campos en el formulario
 * @author DyrTechnologies
 * @version V 1.0
 * @date Wed Oct 03 2007
 *
 *  Part of the CEFIRO dynamic web framework project
 *
 *  Copyright (C) 2007  Dyr technologies http://dyrtech.com.ve
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define("NOT_INSIDE",-1);
define("SEPARATOR",":");

define("DOMAIN_CSS",FULL_URL."domains/domains.css");

/**
 * @class Clase domain
 */

class domain{
	protected $dom_string;

	/**
	 * @brief Constructor de la clase, por omision el dominio es nulo
	 *
	 * @return domain Instancia de la Clase domain
	 */
	public function domain(){
		$this->dom_string="";
	}

	/**
	 * @brief Ajusta la cadena de dominios a la pasada en el argumento
	 *
	 * @param string $_dom_string
	 */
	public function set_domain($_dom_string){
		$this->dom_string=$_dom_string;
	}

	/**
	 * @brief Reinicia los dominios a nulo
	 *
	 */
	public function reset_domain(){
		$this->dom_string="";
	}

	/**
	 * @brief Agrega un nuevo dominio a la cadena de dominios
	 *
	 * @param string $nu_domain
	 */
	public function add_domain($nu_domain){
		if( strlen($this->dom_string) < 1 ){
			$this->dom_string=$nu_domain;
			return;
		}
		/**
		 * @brief Expresi�n regular para buscar el dominio a ingresar en el existente
		 */
		$pattern="/^$nu_domain$|^$nu_domain".SEPARATOR."|".SEPARATOR."$nu_domain".SEPARATOR."|".SEPARATOR."$nu_domain$/";
		if( !preg_match( $pattern,$this->dom_string ) )
		$this->dom_string.=SEPARATOR.$nu_domain;
	}

	/**
	 * @brief Agrega un conjunto de dominios
	 *
	 * @param string $nu_domains
	 */
	public function add_domains($nu_domains){
		/**
		 * @brief Dividimos la cadena por el separador ":"
		 */
		$pattern = "/".SEPARATOR."/";
		$sub_domains=preg_split($pattern,$nu_domains);
		/**
		 * @brief Para cada sub dominio encontrado se trata de insertar en la cadena de dominios de la instancia
		 */
		foreach ($sub_domains as $nu_domain)
		$this->add_domain($nu_domain);
	}

	/**
	 * @brief Elimina un dominio del conjunto dado
	 *
	 * @param string $ol_domain
	 */
	public function remove_domain($ol_domain){
		/**
		 * @brief Establecemos el patr�n del dominio que deseamos eliminar
		 */
		$pattern="^$ol_domain$|$ol_domain".SEPARATOR."|".SEPARATOR."$ol_domain$";
		/**
		 * @brief Reemplazamos por vac�o el lugar donde consigamos una coincidencia
		 */
		$this->dom_string=ereg_replace($pattern,"",$this->dom_string);
	}

	public function remove_domains($ol_domains){
		/**
		 * @brief Dividimos la cadena por el separador ":"
		 */
		$pattern = "/".SEPARATOR."/";
		$sub_domains=preg_split($pattern,$ol_domains);

		/**
		 * @brief Para cada sub dominio encontrado tratamos de eliminar en la cadena de dominios de la instancia
		 */
		foreach ($sub_domains as $ol_domain)
		$this->remove_domain($ol_domain);
	}

	/**
	 * @brief Devuelve la cadena de dominios
	 *
	 * @return string $retval
	 */
	public function get_domains(){
		return $this->dom_string;
	}

	/**
	 * @brief Ajusta los valores de smarty de acuerdo a lo especificado por el dominio
	 */
	private function smarty_domains($name){

		global $smarty;

		/**
		 * @brief Asignacion atributo por atributo a lo deseado en las variables de smarty
		 */
		$smarty->assign("name",$name);
		$smarty->assign("domain",$this->get_domains());

		/**
		 * @brief Asigna la hoja de estilo que contiene los rasgos del dominio a una variable
		 */
		$smarty->assign("domaincss",DOMAIN_CSS);
	}

	/**
	 * @brief Asigna el dominio a la variable $smarty para su renderizacion
	 *
	 */
	public function display_domain($name,$fetch = false){
		global $smarty;
		$smarty->template_dir = dirname(__FILE__).'/';
		$this->smarty_domains($name);

		if(!$fetch)
			$smarty->assign('d_'.$name,$smarty->fetch('domains.tpl'));
		return $smarty->fetch('domains.tpl');
	}
}